package queue

// MaxHeap 在go中用切片存储堆数据
type MaxHeap []int // 定义一个类型信息

// Len 堆节点数
func (h MaxHeap) Len() int {
	return len(h)
}

// Less 比较俩个节点，i>j判断为大根堆，反之为小根堆
func (h MaxHeap) Less(i, j int) bool {
	return h[i] > h[j]
}

// Swap 交换俩个节点
func (h MaxHeap) Swap(i, j int) {
	h[i], h[j] = h[j], h[i]
}

// Pop 弹出末尾结点
func (h *MaxHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[0 : n-1]
	return x
}

// Push 添加节点
func (h *MaxHeap) Push(x interface{}) {
	*h = append(*h, x.(int))
}
